/*****************************************************************************
 * Included Files
 ****************************************************************************/
#ifndef DRV_SOFT_RTC_H
#define DRV_SOFT_RTC_H


#include "ct_type.h"
#include "ct_rtc.h"

// // Define RTC clock sources
// typedef enum {
//     CT_RTC_CLK_LIRC_38P4K = 0,
//     CT_RTC_CLK_LXT_32P768K    // Assuming there is another clock source
// } RTC_ClockSource;

// // Define RTC time scale
// typedef enum {
//     CT_RTC_CLOCK_12 = 0,
//     CT_RTC_CLOCK_24
// } RTC_ClockType;

// // Define AM/PM for 12-hour format
// typedef enum {
//     CT_RTC_24M = 0,
//     CT_RTC_AM,
//     CT_RTC_PM
// } RTC_AmPm;

// // Define RTC interrupt types
// typedef enum {
//     CT_RTC_TIME_TICK = 0,
//     CT_RTC_ALARM
// } RTC_IntType;


// // Define days of the week
// typedef enum {
//     CT_RTC_SUNDAY = 0,
//     CT_RTC_MONDAY,
//     CT_RTC_TUESDAY,
//     CT_RTC_WEDNESDAY,
//     CT_RTC_THURSDAY,
//     CT_RTC_FRIDAY,
//     CT_RTC_SATURDAY
// } RTC_WeekDay;

// // 定义年份基准
// #define RTC_YEAR2000 2000

// // 定义时间和日期的结构体
// typedef struct {
//     uint16_t year;
//     uint8_t  month;
//     uint8_t  day;
//     uint8_t  dayOfWeek;
// } RTC_Date_t;

// typedef struct {
//     uint8_t hour;
//     uint8_t minute;
//     uint8_t second;
//     uint8_t timeMode;    // RTC_CLOCK_12 或 RTC_CLOCK_24
//     uint8_t AmPm;        // RTC_AM 或 RTC_PM
// } RTC_Time_t;

// typedef struct {
//     RTC_Date_t date;
//     RTC_Time_t time;
// } RTC_DateTime_t;


/*****************************************************************************
 * Global Functions
 ****************************************************************************/

void ct_soft_rtc_Tick(void);

void ct_soft_rtc_Run(void);
void ct_soft_rtc_Pause(void);
void ct_soft_rtc_SetDate(const RTC_Date_t *date);
void ct_soft_rtc_SetTime(const RTC_Time_t *time);
void ct_soft_rtc_SetAlarmDate(const RTC_Date_t *date);
void ct_soft_rtc_SetAlarmTime(const RTC_Time_t *time);
void ct_soft_rtc_GetDateAndTime(RTC_DateTime_t *dateTime);
void ct_soft_rtc_GetAlarmDateAndTime(RTC_DateTime_t *dateTime);
void ct_soft_rtc_EnableInterrupt(uint8_t intType);
void ct_soft_rtc_DisableInterrupt(uint8_t intType);
void ct_soft_rtc_SelectClockSource(uint8_t clockSource);

#endif
